package leetcode.problems;

/**
 * _0328 Hamming Distance
 * 代码距离
 * Created by gmwang on 2018/3/23
 */
public class _0329HammingDistance {
    /**
     * The Hamming distance between two integers is the number of positions at which the corresponding bits are different.

     Given two integers x and y, calculate the Hamming distance.

     两个整数之间的代码距离是二进制后值不同的位置数。

     给定两个整数x和y，计算代码距离。
     Note:
     0 ≤ x, y < 231.
     Example:

         Input: x = 1, y = 4

         Output: 2

         Explanation:
         1   (0 0 0 1)
         4   (0 1 0 0)
               ↑  ↑

     The above arrows point to positions where the corresponding bits are different.
     */
    /**
     * 思路：
     * 首先是求不同位置的数量，就是对两个数字进行异或运算。
     * 找出是1的位置，就是不同的位置。即 & 1。
     * 这样每一位都得对1 求&，每&一次，右移一位。
     * @param x,y
     * @return
     */
    public static int hammingDistance(int x, int y) {
        int distance=0;
        //异或运算
        int xor = x^y;
        while(xor!=0) {
            distance+= xor & 1;
            xor >>= 1;
        }
        return distance;
    }

    public static void main(String[] args) {
        int x =1,y=4;
        System.out.println(hammingDistance(x,y));
    }
}
